前一篇我們提到了加殼技術對程式及電腦病毒的保護作用,但一般免費的商用殼的保護效果已經大不如前了,因此有絕大多數程式與病毒都會偏好私有殼,也就是自製殼,以獨特的加密與加壓邏輯保護程式及病毒。
但不論是加密殼或加壓殼,單純使用之前所提過的工具是很難以解析出病毒的行為...
今天就讓我們來介紹動態分析技術吧!!
1. 什麼是動態分析技術
動態分析技術很像是一般在 Programming 中 debug 的技巧,但不是在 debug,比較像是將程式拆解成逐步的行為,以跟隨程式每一步究竟做了哪些事,比方說建立了一個文件、調用了某個 DLL 檔或是搜尋文件進行感染等等。在 debug 中若遇到分支行為時,譬如 12 月 25 日會觸發一分支的行為,而非 12 月 25 日則觸發另一種行為,也可以修改條件來使 debug 路線能照自己想走的分支繼續前進。
在使用 IDA 或 Hiew 進行分析時,較難以觀察出即時的暫存器值。使用動態分析技術可以即時觀察到暫存器的值,便於觀測利用暫存器進行加密運算時的解密行為。
2. 有哪些動態分析工具
目前較常使用的有 OllyDBG、WinDBG、Immunity Debugger 等等,小編使用的是 OllyICE,與 OllyIDBG 類似,但因為使用的華人多,因此繁體中文化自然就會誕生囉,OllyICE即是中文版的 OllyDBG,並且附加了一些功能。如果跟我一樣很懶得看英文的也可以去一些資安相關的論壇找找中文化的 OllyDBG 使用。
*目前 OllyDBG 尚未支援 64-bit。
載點
OllyDBG http://www.ollydbg.de/
3. 要如何使用呢
首先在安裝好 OllyICE 後,可以直接透過拖拉,將文件拉至 OllyICE 上,可以看到介面上有四個視窗包括:
另外在功能列 → 檢視還有像是斷點視窗、記憶體視窗、例外處裡(SEH)視窗等等,有興趣的人可以自己去摸索一番。
常用的快捷鍵包括
:
設定中斷點 (F2)
開啟一個新的可執行程式 (F3)
暫時停止被 Debug 程式的執行 (F12)
單步進入被 Debug 程式的 Call 中 (F7)
直接穿過被 Debug 程式的 Call (F8)
執行選取的程式進行 Debug (F9)
重新載入當前 Debug的程式 (Ctrl+F2)
執行直到返回 (Ctrl+F9)
追蹤時略過被 Debug 程式的 Call (Ctrl+F12)
當前 Debug 的程式 (Alt+F2)
顯示記憶體視窗 (Alt+M)
顯示斷點視窗 (Alt+B)
4. 實例操作
我們使用前篇所提過的 UPX 商用殼來做 OllyICE 的使用說明吧!!
首先我們以電腦中必備的小算盤-calc.exe 作為範例,先對它進行 UPX 加殼,經過 UPX 加殼後包括 MD5、sha256、PEID 以及 BinText 皆可得知為不同的檔案。
首先我們將加過 UPX 殼的小算盤拉到 OllyICE,在程式進入點 1020200
處 可以看到 pushad
指令,有去查指令的應該就知道 pushad 是將一般暫存器 push 進 stack 裡暫存,UPX 殼的起點通常都是這個指令。我們接著點 F7 或 F8 逐步執行,一直到 1020229
的 jb 1020218
會檢查條件往回跳至 1020218
的位址,這就是第一個解密的迴圈(Loop)了,如下圖所示。
在位址 1020218
的指令為 mov al, byte ptr ds:[esi]
,將 esi 指到位址的 1 個 byte 值寫到 al 裡,接著 inc esi
將 esi 中的值(也是一個位址)加 1,接著 mov byte ptr ds:[edi], al
,以及 inc esi
,以上四個步驟就只是將 esi 所指到的資料複寫至 edi 所指到的位址,並在每次迴圈將 esi 與 edi 的位址 +1。
根據以上我們可以統整一下解密所要觀察的關鍵,
解密關鍵
接著我們來觀察寫入後的值是什麼吧,首先在暫存器視窗的 edi 的值(1001000
)上按右鍵,並點選資料視窗中跟隨(Follow in dump),在資料視窗中會跳到 10101000
的位置,接著在資料視窗中按右鍵 → 備份(Backup)→ 建立備份(Create a backup),之後只要這段記憶體裡的資料有變更將會以紅字顯示,如下圖。
讓我們來加快速度,跳過逐步執行迴圈的部份,點選 102022B
的位址,也就是 mov eax, 1
指令處,按下 F4 即可快速從當前逐步的指令行移至 102022B
的位址,再來觀察到資料視窗,疑...怎麼沒有任何變化,此時可以點 Ctrl + F2
重新載入程式再去觀察寫入來源的 esi,就可以知道這迴圈僅寫入 2 個 00
的 bytes,所以不會有變化。
繼續加快速度,逐步執行到 10202B6
時會有個 jmp 102021E
,又回到前面了~這時再次跟隨 edi 的位址並直接在 102022B
的位址按下 F4,可以看到資料視窗開始出現一些值囉。
越來越快~越來越快~經過一次又一次的迴圈後,在 102037D
的位址可以看到 popad
,我們在這個位址上按 F2
設定中斷點,再按 F9
,這時程式會在執行至中斷點位址的程式碼前停下來,在UPX 殼的最後就會將當初 pushad
時存放在 stack 中的暫存器值放回至暫存器中,這時只要在按一下 F7 或 F8 即會將暫存器值還原。
最後最後~看到 102038B
的位址有個 jmp 1012475
,再跳過去後即是原本的小算盤了,下圖左邊是未加殼的小算盤,右邊則是剛剛脫殼小算盤後,
你會發現,疑~是一樣的,這就表示你已經脫殼完成囉!接著就能夠更進一步分析小算盤的行為了。
在這次的例子我們使用了 UPX 殼來做純動態分析,也發現了其中用了許多次迴圈,但在OllyDBG中卻不是那個直接可以看得出是迴圈,因此可以在動態分析時搭配著使用 IDA ,IDA 的圖像視窗能夠幫助你較快速的找到解密的位置,而 OllyDBG 可以快速地得到解密後的資料,這兩件工具的搭配絕對是...
希望各位也能夠親自動手試試看,就能夠體會這其中的奧妙了!!
希望有興趣的讀者也能夠點個追蹤,有任何問題或有想多了解的地方也可以回覆在文章底下唷,謝謝你們XDDDD!
感謝您的教學,想了解還有其他管道可以了解到相關知識嗎? 像是論壇網站、書本之類的,謝謝!
Hi tex19990311,抱歉太晚回復
管道非常多喔!台灣有蠻多資安社團 像是 Hitcon、TDOH、ISDA、UCCU 等等,不定期會開課或是以研討會形式請講者分享資安經驗,可以 follow 他們的 FB 粉絲團。或是部分大學資安社團偶爾會開對外的課程,如果對 Hitcon 有興趣的話可以請教看看虎虎大大虎虎喔,偷偷 cue 一下專業人妻。
論壇可以看一下"看雪論壇"的文章 https://www.kanxue.com/
書的話在初學逆向分析可以看這本喔!書中有蠻清楚的教學及簡單範例手把手 https://www.books.com.tw/products/CN11116201
如果想看新的駭客手法或新漏洞可以在 Twitter 上用 tag 搜尋一些專家或組織的 po 文唷,比方說 #Malware、#Botnet、#ransomware 等等
或是隨時看一下一些資安業者的 blog,很多會帶有攻擊手法分析以及代碼的解析,給你一些連結參考喔
有些 e-learning 平台有資安相關課程,像我個人偏好 Udemy 平台,因為常常有優惠 ($10美金) 超便宜,可以依照不同目的購買課程,像考證照、學習技術等等
當然管道還很多很多,如果有哪些我沒列上的學習管道也歡迎底下留言讓大家知道唷,感謝您的留言
太豐富啦~
真狂